/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.dao.da.TipoPublicoDAO;
import br.siseventos.model.TdTipoPublico;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author marcosnatanpacheco
 */
@ManagedBean(name = "tipoPublicoBean")
@SessionScoped
public class TipoPublicoBean {

    // Campos
    private String nome;
    private String descricao;
    private TdTipoPublico tipoPublicoSelecionado;
    private List<TdTipoPublico> lstDataTableTipoPublico;
    private TipoPublicoDAO daoTipoPublico;

    // Construtor
    public TipoPublicoBean() {
        // Inicializando as DAOs
        daoTipoPublico = new TipoPublicoDAO();

        // Inicializando as listas
        lstDataTableTipoPublico = daoTipoPublico.consultarTodos();
    }

    // Getters e Setters
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public TdTipoPublico getTipoPublicoSelecionado() {
        return tipoPublicoSelecionado;
    }

    public void setTipoPublicoSelecionado(TdTipoPublico tipoPublicoSelecionado) {
        this.tipoPublicoSelecionado = tipoPublicoSelecionado;
    }

    public List<TdTipoPublico> getLstDataTableTipoPublico() {
        return lstDataTableTipoPublico;
    }

    public void setLstDataTableTipoPublico(List<TdTipoPublico> lstDataTableTipoPublico) {
        this.lstDataTableTipoPublico = lstDataTableTipoPublico;
    }

    public TipoPublicoDAO getDaoTipoPublico() {
        return daoTipoPublico;
    }

    public void setDaoTipoPublico(TipoPublicoDAO daoTipoPublico) {
        this.daoTipoPublico = daoTipoPublico;
    }
    // Actions e Listeners

    public void cadastrarTipoPublico(ActionEvent e) {
        try {
            // Cadastrando o novo tipo de público
            TdTipoPublico t = new TdTipoPublico(getNome(), getDescricao(), null);
            daoTipoPublico.incluir(t);
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Tipo de público cadastrado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de tipos de público
            lstDataTableTipoPublico = daoTipoPublico.consultarTodos();
            
            // Invocando script no cliente
            RequestContext rc = RequestContext.getCurrentInstance();
            rc.addCallbackParam("tipoPublicoSalvo", true);
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao cadastrar tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirTipoPublico(ActionEvent e) {
        try {
            // Excluindo o tipo de publico selecionado
            daoTipoPublico.excluir(getTipoPublicoSelecionado().getIdtTipoPublico());
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Tipo de público excluído com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de tipos de público
            lstDataTableTipoPublico = daoTipoPublico.consultarTodos();
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao excluir tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarTipoPublico(ActionEvent e) {
        try {
            // Alterando o tipo de público selecionado
            daoTipoPublico.alterar(getTipoPublicoSelecionado());
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Tipo de público alterado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de tipos de público
            lstDataTableTipoPublico = daoTipoPublico.consultarTodos();
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao alterar tipo de público!", FacesMessage.SEVERITY_ERROR);
        }
    }
    // Util

    public void mostrarMensagemGlobal(String sumario, FacesMessage.Severity nivel) {
        FacesContext contexto = FacesContext.getCurrentInstance();
        FacesMessage msg = new FacesMessage(nivel, sumario, "");
        contexto.addMessage(null, msg);
    }
}
